#ifndef FEACTUALDATASERVICE_PRIVATE_H
#define FEACTUALDATASERVICE_PRIVATE_H
#include "feactualdataservice.h"
#include <QMap>
#include <QList>
#include <QObject>

class FeActualDataItem
{
public:
	FeActualDataItem(FeActualDataProvider *_provider)
	{
		provider = _provider;
	}

	FeActualDataItem(const FeActualDataItem &item)
	{
		provider = item.provider;
		consumers = item.consumers;
	}

	FeActualDataItem &operator=(const FeActualDataItem &item)
	{
		provider = item.provider;
		consumers = item.consumers;
		return *this;
	}

	FeActualDataProvider *provider;
	QList<FeActualDataConsumer *> consumers;
};

class FeActualDataServiceImpl: public QObject, public FeActualDataService
{
	Q_OBJECT
public:
	FeActualDataServiceImpl(QObject *parent=0);
	~FeActualDataServiceImpl();

	void start();
	void stop();

	void registerDataProvider(FeActualDataProvider *provider);
	
	virtual bool sendDataChanged(FeActualDataId id, const QVariant &value);
	virtual bool addDataConsumer(FeActualDataId id, FeActualDataConsumer *consumer);
	virtual bool removeDataConsumer(FeActualDataId id, FeActualDataConsumer *consumer);
	virtual bool queryDataUpdate(FeActualDataId id);

private:
	QList<FeActualDataProvider *> providers;
	QMap<FeActualDataId, FeActualDataItem> data_tab;
	
};

#endif // FEACTUALDATASERVICE_PRIVATE_H